home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 43
/
Aminet 43 (2001)(GTI - Schatztruhe)[!][Jun 2001].iso
/
Aminet
/
game
/
misc
/
WormWars.lha
/
WormWars
/
Source
/
same.h
< prev
next >
Wrap
Text File
|
2001-04-21
|
15KB
|
426 lines
/* $Filename: WormWars/Source/same.h
* $VER: WormWars 6.6
* $Description: Header file for Worm Wars
*
* © Copyright 2000 James R. Jacobs.
SAME ON EACH PLATFORM -------------------------------------------------- */
#define elif else if
#define AGLOBAL ; /* global (project-scope) */
#define MODULE static /* external static (file-scope) */
#define PERSIST static /* internal static (function-scope) */
#define AUTO auto /* automatic (function-scope) */
/* miscellaneous */
#define CAUSEWAIT 100
#define DATELENGTH 8 /* DD/MM/YY */
#define TIMELENGTH 5 /* HH:MM */
#define DEFAULTLEVELS 5
#define ENDXPIXEL ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
#define ENDYPIXEL ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
#define FIELDX 52 /* in squares */
#define FIELDY 38 /* in squares */
#define HISCORES 4
#define LIFEMODULO 1000
#define MAXLEVELS 50 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
#define NAMELENGTH 21 /* 0..20 are TEXT, 21 is NULL */
#define NOMODE 0
#define NUMKEYS 28
#define PATIENCE 20
#define SAYLIMIT ((ENDXPIXEL - STARTXPIXEL) / FONTX)
#define VERSION "$VER: Worm Wars 6.6 (21.4.2001)"
#define ARROWX (FIELDX + 1)
#define LEVELSIZE ((FIELDX + 1) * (FIELDY + 1))
#define HISCORESIZE (6 + NAMELENGTH + 1 + DATELENGTH + 1 + TIMELENGTH + 1)
/* samples */
#define FXBORN_DOG 0
#define FXBORN_DRIP 1
#define FXBORN_GOAT 2
#define FXBORN_MISSILE 3
#define FXBORN_ORB 4
#define FXBORN_PENGUIN 5
#define FXBORN_PROTECTOR 6
#define FXDEATH_FRAGMENT 7 // thud
#define FXDEATH_GOAT 8
#define FXDEATH_ORB 9
#define FXDEATH_PENGUIN 10
#define FXDEATH_WORM 11
#define FXDO_BOMB 12 // tick
#define FXDO_ENCLOSE 13
#define FXDO_GOAT 14 // fire
#define FXDO_JUMP 15
#define FXDO_ORB 16 // split
#define FXGET_AMMO 17
#define FXGET_CYCLONE 18
#define FXGET_DRIP 19
#define FXGET_GROWER 20
#define FXGET_OBJECT 21
#define FXGET_NITRO 22
#define FXGET_POWERUP 23
#define FXGET_PULSE 24 // explode
#define FXGET_SKULL 25
#define FXFILENEW 26
#define FXFILEOPEN 27
#define FXFILESAVE 28
#define FXFILESAVEAS 29
#define FXEDITCUT 30
#define FXEDITCOPY 31
#define FXEDITPASTE 32
#define FXEDITDELETE 33
#define FXHELP 34
#define FXUSE_AMMO 35
#define FXUSE_ARMOUR 36
#define FXUSE_BOMB 37
#define FXUSE_TELEPORT 38
#define FXUSE_TONGUE 39
#define FX_C 40
#define FX_O 41
#define FX_M 42
#define FX_P 43
#define FX_L 44
#define FX_E 45
#define FX_T 46
#define FXPAIN 47
#define FXAPPLAUSE 51 // after each new hiscore
#define FXGAMEOVER 52 // if all worms are dead
#define FXCELEBRATE 53 // if game succeeded
#define FXCLICK 54 // rundown, keypresses
#define FXLAUNCH 55 // title screen
#define FXRIFF 56 // after each rundown
#define FXSIREN 57 // out of time
#define SAMPLES FXSIREN
#define FXCENTRE FXDEATH_PENGUIN
#define FXDO_CLOUD FXDO_GOAT
#define FXFX FXLAUNCH
#define FXRUNDOWN FXCLICK
#define FXUSE_PROTECTOR FXBORN_PROTECTOR
/* key types */
#define MOVE 0 /* not AMMO, TRAINER, ONEHUMAN */
#define TRAINER 2 /* not MOVE, AMMO, ONEHUMAN */
#define ONEHUMAN 3 /* not MOVE, AMMO, TRAINER */
/* speeds */
#define VERYFAST 1
#define FAST 2
#define NORMAL 4
#define SLOW 8
#define VERYSLOW 16 /* must be non-0 */
/* The constant NORMAL is used for several purposes:
a) as a speed (therefore must not be VERYFAST, FAST, SLOW
or VERYSLOW);
b) as a blitmode (therefore must not be BLACK or WHITE); and
c) as a pointer (therefore must not be GOLD, SILVER, EMPTY,
WOOD or STONE).
stats */
#define AMMOLIMIT 100
#define BIASLIMIT 100
#define FREEDOMLIMIT 100
#define STARTLIVES 100
#define LIVESLIMIT 200
#define MODELIMIT 100
#define MULTILIMIT 8 /* don't set >8! */
#define POWERLIMIT 6
#define SCORELIMIT 99999999 // 99 million
/* Field values...
These are objects. */
#define AFFIXER 0
#define AMMO 1
#define ARMOUR 2
#define BIAS 3
#define BOMB 4
#define BONUS 5
#define CLOCK 6
#define CONVERTER 7
#define CUTTER 8
#define CYCLONE 9
#define FREEDOM 10
#define GROWER 11
#define HEALER 12
#define ICE 13
#define LIFE 14
#define LIGHTNING 15
#define MAGNET 16
#define MISSILE 17
#define MULTIPLIER 18
#define NITRO 19
#define POWER 20
#define PROTECTOR 21
#define PULSE 22
#define PUSHER 23
#define REMNANTS 24
#define SIDESHOT 25
#define SLAYER 26
#define SLOWER 27
#define SWITCHER 28
#define TONGUE 29
#define TREASURE 30
#define UMBRELLA 31
#define LASTOBJECT UMBRELLA
/* These are `empty'. */
#define EMPTY (LASTOBJECT + 1)
#define SILVER (LASTOBJECT + 2)
#define GOLD (LASTOBJECT + 3)
#define FIRSTEMPTY EMPTY
#define LASTEMPTY GOLD
#define LASTGOATFIRE LASTEMPTY
/* Nothing special about the following... */
#define TELEPORT (GOLD + 1)
#define FRAGMENT (GOLD + 2)
#define ORB (GOLD + 3)
#define FIRSTPROTECTOR (GOLD + 4)
#define LASTPROTECTOR (GOLD + 7)
/* Margins indicate `ranges' for:
n: orb bouncing, normal mode.
t: orb bouncing, tongue mode.
a: orb bouncing, armour mode.
g: goats. */
#define GREEN_C (GOLD + 8)
#define RED_O (GOLD + 9)
#define BLUE_M (GOLD + 10)
#define YELLOW_P (GOLD + 11)
#define GREEN_L (GOLD + 12)
#define RED_E (GOLD + 13)
#define BLUE_T (GOLD + 14)
#define YELLOW_E (GOLD + 15)
#define SKULL (GOLD + 16) /* n t a g */
#define SLIME (GOLD + 17) /* [ [ */
#define STONE (GOLD + 18) /* [ [ | | */
#define GOAT (GOLD + 19) /* ] | | | */
#define WOOD (GOLD + 20) /* | ] | */
#define FIRSTTAIL (GOLD + 21) /* | | */
#define LASTTAIL (GOLD + 24) /* ] ] */
#define FIRSTLETTER GREEN_C
#define FIRSTNONE STONE
#define FIRSTTONGUE STONE
#define FIRSTARMOUR SLIME
#define FIRSTGOAT SLIME
#define LASTLETTER YELLOW_E
#define LASTNONE LASTTAIL
#define LASTTONGUE GOAT
#define LASTARMOUR GOAT
#define LASTGOAT LASTTAIL
#define LETTERS (LASTLETTER - FIRSTLETTER)
#define ORBTONGUE (LASTTAIL + 1)
#define ORBARMOUR (LASTTAIL + 2)
#define FIRSTFIRE (LASTTAIL + 3)
#define LASTFIRE (LASTTAIL + 6)
#define FIRSTMISSILE (LASTTAIL + 7)
#define LASTMISSILE (LASTTAIL + 10)
#define START (LASTTAIL + 11)
#define MUSIC (LASTTAIL + 12)
#define FX (LASTTAIL + 13)
#define ZERO (LASTTAIL + 14)
#define TIMEBOMB ZERO
#define HEAD (ZERO + 10)
#define GREENHEADUP HEAD
#define REDHEADUP (HEAD + 1)
#define BLUEHEADUP (HEAD + 2)
#define YELLOWHEADUP (HEAD + 3)
#define FIRSTHEAD GREENHEADUP
#define LASTHEAD YELLOWHEADUP
#define GREENHEADDOWN (HEAD + 4)
#define REDHEADDOWN (HEAD + 5)
#define BLUEHEADDOWN (HEAD + 6)
#define YELLOWHEADDOWN (HEAD + 7)
#define GREENHEADLEFT (HEAD + 8)
#define REDHEADLEFT (HEAD + 9)
#define BLUEHEADLEFT (HEAD + 10)
#define YELLOWHEADLEFT (HEAD + 11)
#define GREENHEADRIGHT (HEAD + 12)
#define REDHEADRIGHT (HEAD + 13)
#define BLUEHEADRIGHT (HEAD + 14)
#define YELLOWHEADRIGHT (HEAD + 15)
#define GREENMODEUP (HEAD + 16)
#define REDMODEUP (HEAD + 17)
#define BLUEMODEUP (HEAD + 18)
#define YELLOWMODEUP (HEAD + 19)
#define GREENMODEDOWN (HEAD + 20)
#define REDMODEDOWN (HEAD + 21)
#define BLUEMODEDOWN (HEAD + 22)
#define YELLOWMODEDOWN (HEAD + 23)
#define GREENMODELEFT (HEAD + 24)
#define REDMODELEFT (HEAD + 25)
#define BLUEMODELEFT (HEAD + 26)
#define YELLOWMODELEFT (HEAD + 27)
#define GREENMODERIGHT (HEAD + 28)
#define REDMODERIGHT (HEAD + 29)
#define BLUEMODERIGHT (HEAD + 30)
#define YELLOWMODERIGHT (HEAD + 31)
#define METAL (HEAD + 32)
#define FIRSTDRIP (HEAD + 33)
#define DRIP FIRSTDRIP
#define LASTDRIP (HEAD + 36)
#define BLACKENED (HEAD + 37)
#define WHITENED (HEAD + 38)
#define PENGUIN (HEAD + 39)
#define WHIRLWIND (HEAD + 40)
#define DOG (HEAD + 41) /* dog chasing */
#define DOGAWAKENING (HEAD + 42)
#define DOGDORMANT (HEAD + 43)
#define CLOUD (HEAD + 44)
#define ALL (HEAD + 45)
#define FIRSTARROW (HEAD + 46)
#define LASTARROW (HEAD + 49)
#define DYNAMITE (HEAD + 50)
#define OCTOPUS (HEAD + 51)
#define ARRAYSIZE OCTOPUS
#define ANYTHING STONE // should be something that is valid field contents
/* These have no imagery. */
#define TEMPTAIL (ARRAYSIZE + 1)
#define TEMPWOOD TEMPTAIL
#define TEMPSLIME TEMPTAIL
#define TEMPLIGHTNING TEMPTAIL
#define TEMPSILVER (ARRAYSIZE + 2)
#define TEMPGOLD (ARRAYSIZE + 3)
#define NOSQUARE (ARRAYSIZE + 4)
#define BANGDYNAMITE (ARRAYSIZE + 5)
#define TEMPBANGDYNAMITE (ARRAYSIZE + 6)
/* game status
*/
#define GAMEOVER 0
#define PLAYGAME 1
#define FIELDEDIT 2
#define TITLESCREEN 3
/* indicator locations */
#define CAUSEYDISTANCE 2 /* distance from centre for cause */
#define LETTERYDISTANCE 3 /* distance from centre for letters */
#define ICONY (FIELDY / 2)
#define MUSICICON (FIELDX + 3)
#define CLOCKICON (FIELDX + 4)
/* control values */
#define NONE 0 /* must be 0
*/
#define AMIGA 1
#define JOYSTICK 2
#define KEYBOARD 3
#define IBMPC AMIGA
/* PROTOTYPES -------------------------------------------------------------
engine.c */
AGLOBAL void clearhiscores(void);
AGLOBAL void enginesetup(void);
AGLOBAL void gameloop(void);
AGLOBAL void levelappend(void);
AGLOBAL void leveldelete(void);
AGLOBAL void levelerase(void);
AGLOBAL void levelinsert(void);
AGLOBAL void matchteleports(void);
AGLOBAL void newfields(void);
AGLOBAL void newgame(void);
AGLOBAL void timeloop(void);
AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler);
AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
AGLOBAL void drawsquare(SBYTE x, SBYTE y);
AGLOBAL void icon(SBYTE player, UBYTE image);
AGLOBAL void saylevel(COLOUR colour);
AGLOBAL void train(SCANCODE scancode);
AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
AGLOBAL void wormscore(SBYTE player, LONG score);
AGLOBAL SBYTE loadfields(STRPTR pathname);
AGLOBAL SBYTE partner(SBYTE which);
AGLOBAL ABOOL savefields(STRPTR pathname);
AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
AGLOBAL SBYTE xwrap(SBYTE x);
AGLOBAL SBYTE ywrap(SBYTE y);
/* system.c */
AGLOBAL void celebrate(void);
AGLOBAL void clearjoystick(void);
AGLOBAL void clearkybd(void);
AGLOBAL void clearscreen(void);
AGLOBAL void datestamp(void);
AGLOBAL void gameinput(void);
AGLOBAL void hiscores(void);
AGLOBAL void joy0(void);
AGLOBAL void resettime(void);
AGLOBAL void sendreadrequest(void);
AGLOBAL void systemsetup(void);
AGLOBAL void timing(void);
AGLOBAL void titlescreen(void);
AGLOBAL void turborender(void);
AGLOBAL void waitasec(void);
AGLOBAL void cleanexit(SLONG rc);
AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
AGLOBAL void effect(SBYTE index);
AGLOBAL void fileopen(ABOOL revert);
AGLOBAL void filesaveas(ABOOL flag);
AGLOBAL void flash(ULONG where);
AGLOBAL void rundown(SBYTE player);
AGLOBAL void say(STRPTR sentence, COLOUR colour);
AGLOBAL void stat(SBYTE player, SBYTE line);
AGLOBAL void stopfx(void);
AGLOBAL void ReadAdapterJoystick(UBYTE unit);
AGLOBAL ABOOL anykey(ABOOL timeout);
AGLOBAL ABOOL verify(void);
AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
AGLOBAL ABOOL ZClose(void);
AGLOBAL void help(UBYTE type);
AGLOBAL void helpabout(void);
AGLOBAL void helploop(UBYTE type);
AGLOBAL void toggle(SBYTE key);
AGLOBAL void filedelete(void);
// fe.c
AGLOBAL void fieldedit(void);
AGLOBAL void setbrush(UBYTE newbrush);
/* PUBLIC STRUCTURES ------------------------------------------------------ */
AGLOBAL struct HiScoreStruct
{ SBYTE player, level;
SLONG score; /* the score itself */
TEXT name[NAMELENGTH + 2]; /* name of the player */
ABOOL fresh; /* is the entry new? */
TEXT date[DATELENGTH + 1], /* date of achievement */
time[TIMELENGTH + 1]; /* time of achievement */
};
AGLOBAL struct WormStruct
{ SBYTE x, y, deltax, deltay, position, posidir, victor, cause,
statx, staty, pos, multi, power, mode, last, levelreached,
arrowy;
ABOOL affixer, remnants, alive, moved, nitro, pusher,
sideshot, flashed, rammed;
UBYTE speed, control;
SWORD armour, tongue, ammo, bias, cutter, ice, lives, freedom;
SLONG score, oldscore, hiscore, dynamitescore;
ULONG causewait;
TEXT name[NAMELENGTH + 1];
COLOUR colour;
};
AGLOBAL struct TeleportStruct
{ SBYTE x, y;
ABOOL alive;
};
/* Must have blank line at EOF. */